home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ForCLI / Aren14.lha / Aren1.4 / aren.c < prev    next >
C/C++ Source or Header  |  1994-11-17  |  3KB  |  147 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define ShowError(a) ShowErrorFunc(__LINE__,a)
  6. extern int errno;
  7.  
  8. char *__ver = "$VER: Aren 1.4$";
  9.  
  10.  
  11. void ShowErrorFunc (int line,char *s);
  12. int (*StrNCmp)();
  13.  
  14. void ShowErrorFunc(int line,char *s)
  15. {
  16.   fprintf(stderr,"%s: Error on line %d, ",s,line);
  17.   perror("");
  18.   exit(errno);
  19. }
  20.  
  21. void usage(char *s)
  22. {
  23.   fprintf(stderr,"%s by MENDEZ Marc. (%s %s) All right reserved. Copyright 1994\n",s,__DATE__,__TIME__);
  24.   fprintf(stderr,"Usage: %s [-i] oldpattern newpattern file [file...]\n",s);
  25.   exit(1);
  26. }
  27.  
  28. char * basename(char *f)
  29. {
  30.   char *p,*t ;
  31.   
  32.   if ((p = strrchr(f,'/')) == NULL)
  33.     p = strrchr(f,':');
  34.   
  35.   p = (p == NULL ? f : p+1);
  36.  
  37.   if ((t = strdup(p)) == NULL)
  38.     ShowError("malloc");
  39.   
  40.   return t;
  41. }
  42.  
  43. char * dirname(char *f)
  44. {
  45.   char *p;
  46.   
  47.   if ((p = (char *)malloc(strlen(f)-strlen(basename(f))+1)) == NULL)
  48.     ShowError("malloc");
  49.  
  50.   strncpy(p,f,strlen(f)-strlen(basename(f)));
  51.   p[strlen(f)-strlen(basename(f))]='\0';
  52.   
  53.     
  54.   return p;
  55. }
  56.  
  57.  
  58.  
  59. int main(int arc, char *arv[])
  60. {
  61.   int i,j;
  62.   char *OldPattern, *NewPattern;
  63.   
  64.   char Found=0;            /* Flag. 1 if a filename matches the OldPattern */
  65.   char *NewName;
  66.   int argc;
  67.   char **argv;
  68.   char CaseSensitive=1;
  69.   char *directory;
  70.  
  71.  
  72.   
  73.   if (arc <4 || (!strcmp(arv[1],"-i") && arc < 5) )
  74.     usage(arv[0]);
  75.   
  76.   
  77. #ifdef _DCC            /* Compatibility with UNIX. */
  78.   if (expand_args(arc, arv, &argc, &argv)!=0)
  79.     ShowError("expand_args");
  80. #else
  81.   argv=arv;
  82.   argc=arc;
  83. #endif
  84.  
  85.   if (!strcmp(argv[1],"-i"))
  86.     {
  87.       StrNCmp = strncmp;
  88.       OldPattern=argv[2];
  89.       NewPattern=argv[3];
  90.     }
  91.   else
  92.     {
  93.       StrNCmp = strnicmp;
  94.       OldPattern=argv[1]; 
  95.       NewPattern=argv[2];
  96.     }
  97.   
  98.   
  99.   
  100.   for (i=3;i<argc; i++)
  101.     {
  102.       for(j=0;!Found && j<(strlen(basename(argv[i]))-strlen(OldPattern)+1);j++)
  103.     {
  104.       if (!StrNCmp(basename(argv[i])+j,
  105.                OldPattern,
  106.                strlen(OldPattern))
  107.           )      
  108.         {
  109.           Found=1;
  110.           
  111.           if ((NewName = (char*)malloc(strlen(argv[i]) -
  112.                        strlen(OldPattern) +
  113.                        strlen(NewPattern) + 1)) ==
  114.           NULL)
  115.         ShowError("malloc");
  116.  
  117.           directory = dirname(argv[i]);
  118.  
  119.           
  120.           strcpy(NewName,directory);
  121.           if (j!=0)
  122.         strncat(NewName,basename(argv[i]),j);
  123.           NewName[j+strlen(directory)]='\0';
  124.                             /* Important. If you don't add a '\0', */
  125.                 /* the 'strcat' function will add the */
  126.                 /* text anywhere, just after the first */
  127.                 /* '\0' it finds. */
  128.           
  129.           strcat(NewName,NewPattern);
  130.           strcat(NewName,argv[i]+strlen(directory)+j+strlen(OldPattern));
  131.           if (rename(argv[i],NewName)<0)
  132.         {
  133.           fprintf(stderr,"Error while renaming '%s' as '%s':",argv[i],NewName);
  134.           perror("");
  135.         }
  136.           else
  137.         fprintf(stderr,"Renaming '%s' as '%s'\n",argv[i],NewName);
  138.         }
  139.     }
  140.       Found=0;
  141.     }
  142.   
  143.   
  144.   return 0;
  145.   
  146. }
  147.